package org.lestr.secuel.m3ds.importation.objets2D;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;

import javax.imageio.ImageIO;

import org.lestr.secuel.m3ds.IUsine;
import org.lestr.secuel.m3ds.objets2D.IImage;
import org.lestr.secuel.m3ds.objets2D.IPixel;


public class BMPImportateur implements ImageImportateur {

	
	/** Importe une image */
	public Collection<IImage> importer(File fichier, IUsine usine) throws ImageImportException {
		
		// Variables locales
		Collection<IImage> rslt = new ArrayList<IImage>();
		IImage imageRslt; 
		BufferedImage image = null;
		int[] bits;
		
		// Charge l'image
		try {
			image = ImageIO.read(fichier);
		} catch (IOException e) {
			e.printStackTrace();
			throw new ImageImportException();
		}
		
		// Initialise l'image résultat
		imageRslt = usine.getImage(image.getWidth(), image.getHeight());
		
		// L'ajoute au résultat
		rslt.add(imageRslt);
		
		// Récupère les bits de l'image
		bits = new int[image.getWidth() * image.getHeight()];
		image.getRGB(0, 0, image.getWidth(), image.getHeight(), bits, 0, image.getWidth());
		
		// Les parcours
		for(int i = 0 ; i <= bits.length - 1 ; i = i + 1){
			
			// Charge le pixel
			IPixel pixel = imageRslt.obtenirPixel(i % image.getWidth(), i / image.getWidth());
			pixel.setCouleur(((float) ((bits[i] & 0x00FF0000) >> 16)) / 256, 
							((float) ((bits[i] & 0x0000FF00) >> 8)) / 256, 
							((float) ((bits[i] & 0x000000FF) >> 0)) / 256);
			
			// Charge la transparence
			imageRslt.définirTransparence(i % image.getWidth(), 
								 i / image.getWidth(), 
								 1);
			
		}
		
		// Retourne le résultat
		return rslt;
		
	}// FIN importer
	
	
	/** Retourne l'extension des fichiers du format de fichier importé */
	public String getFormatExtension(){
		
		return "bmp";
		
	}// FIN retFormatExtension
	
	
	/** Retourne le nom du format de fichier importé */
	public String getFormatNom(){
		
		return "Bitmap";
		
	}// FIN retFormatNom
	
	
}// FIN Classe
